// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Riobet Зеркало 2024 – Беспрепятственный Доступ к Риобет Официальному Сайту Казино – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Riobet Зеркало 2024 – Беспрепятственный Доступ к Риобет Официальному Сайту Казино

Риобет зеркало на сегодня – ваш ключ к неограниченному доступу на риобет официальный сайт. Не упустите шанс погрузиться в мир riobet казино без ограничений!

Будьте всегда в игре с риобет зеркалом рабочим. Rio bet – это не просто казино, это стиль жизни!

Попробуйте удачу на riobet casino и получите незабываемые эмоции. Риобет зеркало всегда под рукой!

Riobet Зеркало 2024: Доступ к официальному сайту казино

Riobet Зеркало 2024 – ваш безопасный и надежный способ доступа к Казино Риобет. Независимо от того, почему вы не можете попасть на официальный сайт Riobet, наше зеркало всегда готово помочь. Riobet Зеркало на сегодня обеспечивает бесперебойную работу и полную функциональность, как и оригинальный сайт.

Казино Riobet предлагает широкий выбор игр, щедрые бонусы и надежные платежные системы. С Riobet Зеркало рабочее, вы можете наслаждаться всеми преимуществами Rio Bet без каких-либо ограничений. Riobet Зеркало 2024 – это не просто альтернативный доступ, это гарантия вашего комфорта и безопасности.

Riobet Официальный сайт казино всегда доступен через наше зеркало. Не упустите возможность играть в Riobet Казино с полным функционалом и всеми бонусами. Riobet Зеркало на сегодня – ваш ключ к незабываемому игровому опыту.

Безопасность и надежность Riobet Зеркала

Riobet Зеркало на сегодня работает без перебоев, предоставляя доступ к полному функционалу Riobet Казино. Riobet Зеркало рабочее всегда готово принять вас, независимо от географических ограничений. Riobet Официальный сайт продолжает радовать своих пользователей широким выбором игр и бонусов, обеспечивая при этом максимальный уровень безопасности.

Riobet Казино – это не просто слово, а гарантия качественного и безопасного времяпрепровождения. Rio Bet, благодаря своему зеркалу, обеспечивает стабильный и безопасный доступ к своим услугам, что делает его идеальным выбором для всех любителей онлайн-казино.

Как использовать Riobet Зеркало для игры в казино

Шаг 1: Найдите рабочее Riobet Зеркало. Существует несколько способов получить доступ к Riobet Зеркало. Можно воспользоваться поиском в интернете или обратиться к надежным источникам информации.

Шаг 2: Перейдите по ссылке. После того как вы нашли Riobet Зеркало, просто кликните по ссылке, чтобы перейти на страницу Riobet Казино.

Шаг 3: Войдите в свой аккаунт. Если у вас уже есть аккаунт на Riobet Официальный Сайт, используйте те же данные для входа через Riobet Зеркало.

Шаг 4: Наслаждайтесь игрой! После успешного входа вы сможете играть в любимые игры Riobet Casino, делать ставки и выигрывать, как будто вы на Riobet Официальный Сайт.

Riobet Зеркало – это безопасный и удобный способ оставаться в игре, даже если официальный сайт временно недоступен.

Преимущества игры на Riobet Зеркале

Игра в казино Riobet через зеркало открывает перед игроками множество преимуществ, которые делают игровой процесс еще более удобным и безопасным.

  • Доступность 24/7: Riobet зеркало рабочее обеспечивает круглосуточный доступ к rio bet, независимо от блокировок и технических сбоев.
  • Безопасность данных: Игра на riobet зеркале гарантирует полную конфиденциальность и защиту личных данных игроков.
  • Широкий выбор игр: Riobet казино предлагает огромный ассортимент игр, включая слоты, рулетку, блэкджек и многое другое.
  • Быстрые выплаты: Riobet официальный сайт обеспечивает моментальные выплаты выигрышей, что делает игру еще более приятной.
  • Бонусы и акции: Riobet зеркало предоставляет доступ к разнообразным бонусам и акциям, которые увеличивают шансы на победу.

Riobet зеркало – это ваш надежный и удобный способ наслаждаться всеми преимуществами riobet casino, не беспокоясь о блокировках и других технических проблемах.

Обновления и новости Riobet Зеркала 2024

Riobet Зеркало 2024 продолжает радовать своих пользователей новыми обновлениями и интересными новостями. Наш официальный сайт казино riobet постоянно совершенствуется, чтобы предоставить вам лучший опыт игры.

В 2024 году мы расширили наш ассортимент игр, добавив новые слоты и live-игры от ведущих провайдеров. Теперь вы можете наслаждаться разнообразием опций и выбирать то, что вам больше всего нравится.

Кроме того, мы улучшили систему безопасности, чтобы обеспечить вам максимальную защиту ваших данных. Riobet Зеркало на сегодня работает на самом современном уровне, гарантируя вам безопасность и комфорт.

Дата
Новость

01.01.2024 Запуск нового раздела live-казино с эксклюзивными играми. 15.02.2024 Добавление 50 новых слотов от известных разработчиков. 01.03.2024 Улучшение системы безопасности с использованием передовых технологий.

Не забывайте регулярно проверять Riobet Зеркало рабочее, чтобы быть в курсе всех обновлений и новостей. Казино Riobet продолжает радовать своих игроков и предоставлять лучшие условия для игры.

Присоединяйтесь к Riobet Зеркалу 2024 и наслаждайтесь игрой на официальном сайте riobet casino!

Помощь и поддержка Riobet Зеркала

В случае возникновения любых вопросов или проблем, связанных с rio bet, казино риобет или riobet зеркало на сегодня, наша служба поддержки готова оказать вам помощь. Riobet casino, riobet официальный сайт и riobet зеркало рабочее всегда доступны для вас.

Если у вас возникли сложности с доступом к riobet зеркало, не волнуйтесь! Наша команда специалистов оперативно решит любую проблему. Riobet казино и riobet зеркало на сегодня гарантируют вам бесперебойный доступ к игровым развлечениям.

Riobet зеркало рабочее – это ваша возможность продолжить игру без задержек. Если вы столкнулись с какими-либо техническими проблемами, обратитесь в службу поддержки rio bet. Riobet casino и riobet официальный сайт всегда готовы помочь вам.

Riobet зеркало на сегодня – это надежное решение для тех, кто ценит стабильность и качество. Независимо от того, какие трудности возникли, riobet казино и riobet зеркало рабочее обеспечат вам непрерывный доступ к игровым развлечениям.

Design and Develop by Ovatheme